snippet linux_driver_min "simple user kernel module template" b
#include <linux/init.h>
#include <linux/module.h>

static int __init ${1:my_test}_init(void)
{
    printk("my first kernel module init\n");
    return 0;
}

static void __exit $1_exit(void)
{
    printk("googbye\n");
}

module_init($1_init);
module_exit($1_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("${2:Kdurant}");
MODULE_DESCRIPTION("${3:my test kernel module}");
MODULE_ALIAS("${4:mytest}");

// makefile , 指定的BASEINCLUDE需要是编译过的内核源码路径
// obj-m += $1.o
// BASEINCLUDE ?= /lib/modules/$(shell uname -r)/build
// all:
// 	make -C $(BASEINCLUDE) M=$(PWD) modules
// clean:
// 	make -C $(BASEINCLUDE) M=$(PWD) clean
// 	rm -f *.ko
endsnippet

snippet linux_driver_char "simple char device driver template" b
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/ide.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/errno.h>
#include <linux/gpio.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <asm/mach/map.h>
#include <asm/uaccess.h>
#include <asm/io.h>


endsnippet

snippet api_select "select() template" b

endsnippet
